import { IUserStore } from '@/types/user'
import { IRouerStackStore, Menu } from '@/types/home'
import { defineStore } from 'pinia'

// Names 枚举 是为了定义一组数据  挡在defineStore中 作为唯一的值
enum Names {
    User = 'User',
    RouteStack = 'RouteStack'
}

// defineStore（a,b）  a是给仓库绑定一个唯一的值，b是配置项，类型是对象，有三个参数 state,getters,actions
export const UserStore = defineStore(Names.User, {
    state: (): IUserStore => {
        return {
            username: "默认数据",
            role: '',
            token: '',
        }
    },
    // 相当于一个计算属性 可以在不修改state值的情况下 对值进行一些操作
    getters: {
        getUserName(): string {
            return this.username;
        },
        getRole(): string {
            return this.role === 'admin' ? '管理员' : '普通用户';
        }
    },
    //可以进行同步异步的提交
    actions: {

    },
    persist: {  // 持久化插件的配置
        // 存储的 key， 默认是 defineStore 的第一个参数
        key: Names.User,
        // 存储位置，默认 localStorage
        storage: localStorage,
        // 指定内容
        paths: ["username", "role"],
    },
})

export const RouteStackStore = defineStore(Names.RouteStack, {
    state: (): IRouerStackStore => {
        return {
            routeArr: [],
            activePath: ''
        }
    },
    // 相当于一个计算属性 可以在不修改state值的情况下 对值进行一些操作
    getters: {
        getRouteArr(): Menu[] {
            return this.routeArr;
        },
        getActivePath(): string {
            return this.activePath;
        }
    },
    //可以进行同步异步的提交
    actions: {

    }
})